#ifndef MQTT_H
#define MQTT_H

#include <MQTTAsync.h>
#include <MQTTClient.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

#define ADDRESS     "tcp://218.201.45.7:1883"
#define CLIENTID    "First_device"
#define PAYLOAD     "Hello World!"
#define QOS         0
#define TIMEOUT     10000L
#define SUBSCRIBE   "$sys/zGHFQz4TAK/First_device/thing/property/post/reply" //订阅
#define PUBLISH     "$sys/zGHFQz4TAK/First_device/thing/property/post" //发布

extern volatile MQTTClient_deliveryToken deliveredtoken;
extern MQTTClient client;		//类似于套节字的作用用于与服务端通信的结构体

/********************************************
 *函数名:mqtt_connect
 *功  能:初始化并链接上云服务器
 *参  数:
 *     用户名,密码,连接失败回调函数,发送成功回调函数,交付成功回调函数
 *  
 *返回值:
 *     无
 *
 *注意事项:
 *     传入的五个参数均不能为空指针
 *******************************************/
extern void mqtt_connect(const char *username, const char *password, void (*connlost)(void *, char *), 
						int (*msgarrvd)(void *, char *, int , MQTTClient_message *),
						void (*delivered)(void *, MQTTClient_deliveryToken));

/********************************************
 *函数名:mqtt_send_message
 *功  能:将信息上传到云平台
 *参  数:
 *     用户名,密码,连接失败回调函数,发送成功回调函数,交付成功回调函数
 *  
 *返回值:
 *     无
 *
 *注意事项:
 *     传递的消息必须是按格式来，与onenet上数据类型和数量保持一直
 *     ,id必须有，如果id重复，则不会发送数据
 *******************************************/
extern int mqtt_send_message(char *message, int id);

#endif
